﻿using System;
using System.Collections.Generic;
using System.Transactions;
using SeguradoraIA.Framework.Log;
using SeguradoraIA.Framework;
using SeguradoraIA.Framework.Service;
using SeguradoraIA.Data.TO;

namespace SeguradoraIA.Service
{
    public class MarcaCarroService
    {
		#region 'Propriedades'
        private static readonly Business.MarcaCarro business = new Business.MarcaCarro();
		#endregion
		
		#region 'Metodos padrao'
		
		#region 'ObterTodos'
        /// <summary>Metodo encarregado de obter todos os registros.</summary>
        /// <returns>Lista da entidade</returns>
        /// <remarks>BSI</remarks>
        public IList<MarcaCarroTO> ObterTodos()
        {
            try
            {
				var lista = business.ObterTodos();

				LogManager.LogReturn(lista);
	            
				return lista;
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
        #endregion

		#region 'Obter'
        /// <summary>Metodo encarregado de obter um registro. Busca realizada pela chave primária da tabela.</summary>
        /// <returns>Entidade</returns>
        /// <remarks>BSI</remarks>
        public MarcaCarroTO Obter(int idMarcaCarro)
        {
            LogManager.LogEntryParameters(idMarcaCarro);

            try
            {
                var to = business.Obter(idMarcaCarro);

                LogManager.LogReturn(to);

                return to;
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
        #endregion
        
        #region 'Listar'
        /// <summary>Metodo encarregado de obter uma lista de registros. Busca realizada por um ou mais campos da entidade.</summary>
        /// <returns>Lista da entidade</returns>
        /// <remarks>BSI</remarks>
        public IList<MarcaCarroTO> Listar(MarcaCarroTO to)
        {
            LogManager.LogEntryParameters(to);

            try
            {
                var lista = business.Listar(to);
				LogManager.LogReturn(lista);
				return lista;
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
		#endregion
		
		#region 'Inserir'
        /// <summary>Metodo encarregado de inserir um registro.</summary>
        /// <returns>Entidade inserida.</returns>
        /// <remarks>BSI</remarks>
        public MarcaCarroTO Inserir(MarcaCarroTO to)
        {
            LogManager.LogEntryParameters(to);

            try
            {				Check.Require(!string.IsNullOrEmpty(to.Descricao), ResourceWrapper.GetMessage("MSG0001"));

                business.Inserir(to);
                
                LogManager.LogReturn(to);

                return to;
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
		#endregion
		
		#region 'Excluir'
        /// <summary>Metodo encarregado de excluir um registro.</summary>
        /// <remarks>BSI</remarks> 
        public void Excluir(int idMarcaCarro)
        {
            LogManager.LogEntryParameters(idMarcaCarro);

            try
            {
                business.Excluir(idMarcaCarro);
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
		#endregion
		
		#region 'Atualizar'
        /// <summary>Metodo encarregado de atualizar um registro.</summary>
        /// <returns>Entidade atualizada.</returns>
        /// <remarks>BSI</remarks>
        public MarcaCarroTO Atualizar(MarcaCarroTO to)
        {
            LogManager.LogEntryParameters(to);

            try
            {				Check.Require(!string.IsNullOrEmpty(to.Descricao), ResourceWrapper.GetMessage("MSG0001"));

                business.Atualizar(to);

                LogManager.LogReturn(to);

                return to;
            }
            catch (Exception ex)
            {
                LogManager.LogException(ex);
                throw;
            }
        }
	#endregion
	
    #endregion 
    }
}